/**
 * qiankun 环境判断工具类（主应用版本）
 * 统一管理所有与 qiankun 相关的环境判断逻辑
 */

// 缓存检测结果，避免重复计算
let cache = {
    isSubApp: null,
    isMainApp: null,
    appType: null,
    globalActions: null,
    mainAppData: null
}

// 重置缓存
export const resetCache = () => {
    cache = {
        isSubApp: null,
        isMainApp: null,
        appType: null,
        globalActions: null,
        mainAppData: null
    }
}

/**
 * 判断是否为子应用环境
 */
export const isSubApp = () => {
    if (cache.isSubApp !== null) {
        return cache.isSubApp
    }

    try {
        // 简化判断逻辑：主要检查 qiankun 标识和路径
        const hasQiankunFlag = !!(window.__POWERED_BY_QIANKUN__ || window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__)
        const isSubAppPath = window.location.pathname.includes('/sub-app')
        
        const result = hasQiankunFlag || isSubAppPath
        
        cache.isSubApp = result
        return result
    } catch (error) {
        console.warn('[环境检测] isSubApp 检测异常:', error)
        cache.isSubApp = false
        return false
    }
}

/**
 * 判断是否为主应用环境
 */
export const isMainApp = () => {
    if (cache.isMainApp !== null) {
        return cache.isMainApp
    }

    try {
        // 1. 不是子应用
        // 2. 在顶级窗口
        // 3. 或者有子应用容器（说明是主应用的布局）
        const notSubApp = !isSubApp()
        const isTopWindow = window.self === window.top
        const hasSubAppContainer = document.querySelector('#subapp-viewport') !== null
        
        // 调试信息
        console.log('[环境检测] 主应用判断:', {
            notSubApp,
            isTopWindow,
            hasSubAppContainer,
            pathname: window.location.pathname,
            hasQiankunFlags: !!(window.__POWERED_BY_QIANKUN__ || window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__)
        })
        
        // 如果不是子应用且在顶级窗口，或者有子应用容器，说明是主应用
        const result = notSubApp && (isTopWindow || hasSubAppContainer)
        
        cache.isMainApp = result
        return result
    } catch (error) {
        console.warn('[环境检测] isMainApp 检测异常:', error)
        cache.isMainApp = false
        return false
    }
}

/**
 * 判断是否为独立运行的应用
 */
export const isStandalone = () => {
    return !isSubApp() && !isMainApp()
}

/**
 * 获取应用类型
 */
export const getAppType = () => {
    if (cache.appType !== null) {
        return cache.appType
    }

    if (isMainApp()) {
        cache.appType = 'main'
    } else if (isSubApp()) {
        cache.appType = 'sub'
    } else {
        cache.appType = 'standalone'
    }

    return cache.appType
}

/**
 * 获取子应用名称
 */
export const getSubAppName = () => {
    if (!isSubApp()) return null
    try {
        const pathname = window.location.pathname
        const match = pathname.match(/\/(sub-app\d+)/)
        return match ? match[1] : 'unknown-sub-app'
    } catch (error) {
        console.warn('[环境检测] getSubAppName 检测异常:', error)
        return null
    }
}

/**
 * 获取路由模式
 */
export const getRouterMode = () => {
    return isSubApp() ? 'memory' : 'history'
}

// ========== 简化的全局状态管理 ==========

/**
 * 设置全局状态管理器（在 qiankunRegister.js 中调用）
 */
export const setGlobalActions = (actions) => {
    cache.globalActions = actions
    console.log('[主应用] 全局状态管理器已设置')
}

/**
 * 获取全局状态管理器
 */
export const getGlobalActions = () => {
    return cache.globalActions
}

/**
 * 设置主应用数据管理器（在 qiankunRegister.js 中调用）
 */
export const setMainAppData = (data) => {
    cache.mainAppData = data
    console.log('[主应用] 数据管理器已设置')
}

/**
 * 获取主应用数据管理器
 */
export const getMainAppData = () => {
    return cache.mainAppData
}

/**
 * Vue 3 组合式函数
 */
export const useQiankun = () => {
    const appType = getAppType()
    const subAppName = getSubAppName()
    const routerMode = getRouterMode()
    const globalActions = getGlobalActions()
    const mainAppData = getMainAppData()

    // 安全获取全局状态
    const getGlobalStateSafely = () => {
        try {
            return globalActions?.getGlobalState?.() || null
        } catch (error) {
            console.warn('[主应用] 获取全局状态失败:', error)
            return null
        }
    }

    return {
        // 环境判断
        isSubApp: isSubApp(),
        isMainApp: isMainApp(),
        isStandalone: isStandalone(),
        appType,
        subAppName,
        routerMode,
        
        // 数据管理（直接使用 qiankunRegister.js 中的）
        globalActions,
        mainAppData,
        globalState: getGlobalStateSafely(),
        
        // 便捷方法（如果 mainAppData 存在）
        setUser: mainAppData?.setUser?.bind(mainAppData),
        setTheme: mainAppData?.setTheme?.bind(mainAppData),
        setLanguage: mainAppData?.setLanguage?.bind(mainAppData),
        sendNotification: mainAppData?.sendNotification?.bind(mainAppData),
        updateSharedData: mainAppData?.updateSharedData?.bind(mainAppData),
        getGlobalState: getGlobalStateSafely,
        
        // 路由跳转（使用 Vue Router）
        navigateToSubApp: (appName, path = '') => {
            const router = window.__VUE_ROUTER__
            if (router) {
                router.push(`/${appName}${path}`)
            } else {
                window.history.pushState(null, '', `/${appName}${path}`)
            }
        },
        
        // 调试信息
        debugInfo: {
            isMainApp: isMainApp(),
            isSubApp: isSubApp(),
            appType,
            subAppName,
            location: {
                href: location.href,
                pathname: location.pathname,
            },
            qiankunFlags: {
                __POWERED_BY_QIANKUN__: window.__POWERED_BY_QIANKUN__,
                __INJECTED_PUBLIC_PATH_BY_QIANKUN__: window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__,
            },
            hasSubAppContainer: document.querySelector('#subapp-viewport') !== null,
            isTopWindow: window.self === window.top
        }
    }
}

// 调试模式
export const enableDebugMode = () => {
    window.__QIANKUN_DEBUG__ = true
    console.log('[qiankun 工具] 调试模式已开启')
    console.log('环境信息:', {
        isSubApp: isSubApp(),
        isMainApp: isMainApp(),
        appType: getAppType(),
        subAppName: getSubAppName(),
        routerMode: getRouterMode(),
        hasSubAppContainer: document.querySelector('#subapp-viewport') !== null,
        isTopWindow: window.self === window.top
    })
}

// 简化的默认导出
export default {
    isMainApp,
    isSubApp,
    isStandalone,
    getAppType,
    getSubAppName,
    getRouterMode,
    useQiankun,
    enableDebugMode,
    resetCache
} 